package com.sypk.common.util.json;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;

import com.alibaba.fastjson.serializer.ValueFilter;

/**
 * 类  描  述 : JSON数据格式化过滤器
 */
public class JsonValueFilter implements ValueFilter{
    
    /**
     * 小数格式化工具
     */
    private static final DecimalFormat df = new DecimalFormat("0.00");
    
    /**
     * 日期格式化工具
     */
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    
    /**
     * double基本数据类型
     */
    private static final String TYPE_DOUBLE_BASIC = "double";
    
    /**
     * Double包装数据类型
     */
    private static final String TYPE_DOUBLE_PACK = "java.lang.Double";
    
    /**
     * float基本数据类型
     */
    private static final String TYPE_FLOAT_BASIC = "float";
    
    /**
     * Float包装数据类型
     */
    private static final String TYPE_FLOAT_PACK = "java.lang.Float";
    
    /**
     * Date包装数据类型
     */
    private static final String TYPE_DATE_PACK = "java.util.Date";
    
    /**
     * 1.null数组转换为             ""
     * 2.double类型转换为        0.0
     * 3.float类型转换为          0.0
     * 3.Date类型转换为             yyyyMMddHHmmss
     * 
     * @param object json的实体对象
     * @param name 实体对象的field名称
     * @param value 字段值
     */
    public Object process(Object object, String name, Object value) {
        
        if(null == value){
            
            //如果为null，则转换为空字符串
            return "";
        }
        
        //字段类型
        String fieldType = value.getClass().getName();
        
        if(TYPE_DOUBLE_BASIC.equals(fieldType) || 
                TYPE_DOUBLE_PACK.equals(fieldType)||
                TYPE_FLOAT_BASIC.equals(fieldType) ||
                TYPE_FLOAT_PACK.equals(fieldType)){
            
            //double格式转换
            return df.format(value);
            
        }else if(TYPE_DATE_PACK.equals(fieldType)){
            
            //date格式转换
            return sdf.format(value);
            
        }
        
        //转换为字符串
        return value;
    }
    
}
